﻿using System;
using System.Data;
using Insifo.WE;
using System.Web.Security;
using System.Web;

public partial class segAcceso : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_REG_SIGNUP = @"/reg/regSignUp.aspx";

    #endregion

    #region PROPERTIES


    #endregion PROPERTIES

    #region EVENTOS

    /// <summary>
    /// Carga la Pagina
    /// </summary> 
    /// <returns></returns>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
           
            Cargar();

        }
    }


    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        ValidarIngreso();
    }

    protected void Cargar()
    {
        Response.AddHeader("Pragma", "no-cache");
        Response.AddHeader("Pragma", "no-store");
        Response.AddHeader("cache-control", "no-cache");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        this.Title = HttpUtility.HtmlEncode(Resources.resDiccionario.Galexito); 
        //Carga Configuracion
        ConfiguraVista(true);
        ConfiguraLinks(true);
    }

    protected void btnValidar_Click(object sender, EventArgs e)
    {
        ValidaUsuario();
    }

    protected void btnUsuario_Click(object sender, EventArgs e)
    {
        CargaCompania();
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, false);
    }

    #endregion EVENTOS

    #region METODOS

    protected void ValidaUsuario()
    {
        string strUsuario = string.Empty, strClave = string.Empty, strMensaje = string.Empty;
        int intNumeroIntentos = 0;

        strUsuario = txtUsuario.Text.Trim().ToUpper();
        strClave = txtClave.Text.Trim();

        if (string.IsNullOrEmpty(strUsuario))
        {
            this.lblMensaje.Text = Resources.resMensaje.msgAlertaIngresarUsuario; //"Ingrese el usuario.";
            return;
        }
        if (string.IsNullOrEmpty(strClave))
        {
            this.lblMensaje.Text = Resources.resMensaje.msgAlertaIngresarClave; // "Ingrese una clave.";
            return;
        }
        if (!ccAcceso.IsValid)
        {
            this.lblMensaje.Text = Resources.resMensaje.msgAlertaIngresarCodigoCorrecto; // "El codigo es incorrecto.";
            return;
        }

        //if (DateTime.Now > Util.ObtenerFechaCadena("01/01/2013", AppSettings.FormatoFecha))
        //{
        //    this.lblMensaje.Text = Resources.resMensaje.msgAlertaLicenciaFinalizada; // "Su licencia ha finalizado.";
        //    return;
        //}
        //string strHostName = System.Net.Dns.GetHostName();
        //if (strHostName.ToUpper() != "WIN2K3-TEST")
        //{
        //    this.lblMensaje.Text = Resources.resMensaje.msgAlertaLicenciaFinalizada; // "Su licencia ha finalizado.";
        //    return;
        //}

        WCUsuario.WCUsuarioClient wc = new WCUsuario.WCUsuarioClient();
        WCUsuario.BEUsuario oBEUsuario = null;
        BEUsuarioSistema bu = new BEUsuarioSistema
        {
            CodigoUsuario = strUsuario,
        };

        UsuarioSistema = bu;
        Encripta enc = new Encripta();

        WCUsuario.BEEntidadParam bepar = wc.ValidarUsuario(strUsuario, enc.EncriptarCadena(strClave), intNumeroIntentos);
        //Carga Informacion del Usuario

        if (bepar.Error < 0)
        {
            switch (bepar.Error)
            {
                case -1:
                    strMensaje = Resources.resMensaje.msgAlertaIngresarUsuario;
                    break;
                case -2:
                    strMensaje = Resources.resMensaje.msgAlertaUsuarioNoRegistrado;
                    break;
                case -3:
                    strMensaje = Resources.resMensaje.msgAlertaUsuarioNoRegistrado;
                    break;
                case -4:
                    strMensaje = Resources.resMensaje.msgAlertaIngresoPerfilNoUsuario;
                    break;
                case -5:
                    strMensaje = Resources.resMensaje.msgAlertaNoExisteUsuario;
                    break;
                case -6:
                    strMensaje = string.Empty;
                    break;
                case -7:
                    strMensaje = Resources.resMensaje.msgAlertaUsuarioBloqueado;
                    break;
                case -8:
                    strMensaje = Resources.resMensaje.msgAlertaClaveInvalida;
                    break;

                case -9:
                    strMensaje = string.Empty;
                    break;
                case -10:
                    strMensaje = Resources.resMensaje.msgAlertaLicenciaFinalizada;
                    break;
                default:
                    strMensaje = Resources.resMensaje.msgAlertaErrorNoIdentificado;
                    break;
            }
            lblMensaje.Text = strMensaje;
            //FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, false);
            return;
        }
        else
        {
            //Obtener Usuario
            oBEUsuario = ObtenerUsuario(strUsuario);
            if (!string.IsNullOrEmpty(oBEUsuario.ReiniciarPassword))
            {
                if (oBEUsuario.ReiniciarPassword.Equals("S")) //cambiar clave
                {
                    Response.Redirect("~/seg/segAccesoCambiarClaveReset.aspx?s=" + strUsuario);
                }
            }
        }

        //Configura Vista
        UsuarioSistema.CodigoUsuario = strUsuario;
        UsuarioSistema.IdPersona = oBEUsuario.IdPersona;
        UsuarioSistema.Nombre = oBEUsuario.Nombre;
        UsuarioSistema.Llave = enc.GenerateRNG();
        txtClave.Text = string.Empty;
        lblMensaje.Text = string.Empty;
        txtClave0.Text = "**********";
        ConfiguraVista(false);
        CargaCompania();

    }

    
    protected void ValidarIngreso()
    {
        int intRetorno = 0;
        string strIdCompania = string.Empty, strIdioma = string.Empty;
        WCMensaje.WCMensajeClient wc = new WCMensaje.WCMensajeClient();
        WCMensaje.BEMensaje beMen = new WCMensaje.BEMensaje();
        try
        {
            beMen.EnIdioma = AppSettings.LenguajeDesarrollo;
            beMen.IdAplicacion = Constantes.IDAPLICACION_SYSTEM;
            if (string.IsNullOrEmpty(ddlCompania.SelectedValue))
            {
                beMen.IdMensaje = 6;
                lblMensaje.Text = wc.ObtenerEnIdioma(beMen);
                intRetorno = -1;
            }
            if (intRetorno == 0 && string.IsNullOrEmpty(Master.ddlIdiomasMast.SelectedValue))
            {
                beMen.IdMensaje = 8;
                lblMensaje.Text = wc.ObtenerEnIdioma(beMen);
                strIdioma = AppSettings.LenguajeDesarrollo;
            }
            else
            {
                strIdioma = Master.ddlIdiomasMast.SelectedValue;
            }

            if (intRetorno == 0)
            {
                strIdCompania = ddlCompania.SelectedValue.Trim();
                WCCompania.BECompania beCom = ObtenerCompania(int.Parse(strIdCompania));
                UsuarioSistema.CodigoUsuario = txtUsuario.Text.Trim();
                UsuarioSistema.IdCompania = beCom.IdCompania;
                UsuarioSistema.CodigoCompania = beCom.CodigoCompania;
                UsuarioSistema.DominioAplicacion = ObtenerDominio();
                UsuarioSistema.DescripcionCompania = beCom.Descripcion;
                UsuarioSistema.CodigoIdioma = strIdioma;
            }
            
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            if (wc.State != System.ServiceModel.CommunicationState.Closed)
                wc.Close();
        }
        if (intRetorno == 0)
        {
            Response.Redirect("~/gen/genAplicaciones.aspx?s=0");
        }

    }

    protected void CargaCompania()
    {
        string strUsuario = string.Empty;
        strUsuario = this.txtUsuario.Text.Trim();
        if (strUsuario.Length > 0 )
        {
            DataSet dt = ListarCompaniasPorUsuario(strUsuario);
            Util.loadCombo(ddlCompania, dt.Tables[0], "Descripcion", "IdCompania");
        }
    }

    /// <summary>
    /// Obtiene el Dominio de la Aplicacion
    /// </summary>
    /// <returns>string</returns>
    protected string ObtenerDominio()
    {
        string strDominioActual = hfDominioAplicacion.Value;
        if (string.IsNullOrEmpty(hfDominioAplicacion.Value))
        {
            DataTable dtDominio = ListarAplicacionDominioPorAplicacion(Constantes.IDAPLICACION_SYSTEM);
            string strURLDominioActual = Util.URLDominioActual();
            foreach (DataRow dr in dtDominio.Rows)
            {
                if (dr["DominioURL"].ToString().ToUpper() == strURLDominioActual.ToUpper())
                {
                    strDominioActual = dr["Dominio"].ToString();
                    break;
                }
            }
            hfDominioAplicacion.Value = strDominioActual;
        }
        return strDominioActual;
    }

    protected void ConfiguraVista(bool pboolVistaInicial)
    {
        txtClave0.Enabled = false;
        if (pboolVistaInicial)
        {
            trCompania.Visible = false;
            trAceptar.Visible = false;
            txtClave0.Visible = false;
            txtClave.Visible = true;
            txtClave.Enabled = true;
        }
        else
        {
            trCompania.Visible = true;
            trAceptar.Visible = true;
            trValidar.Visible = false;
            trCaptcha.Visible = false;

            txtUsuario.Enabled = false;
            txtClave.Enabled = false;
            txtClave.Visible = false;
            txtClave0.Visible = true;
        }
    }

    protected void ConfiguraLinks(bool pbVista)
    {
        string strDominioActual = ObtenerDominio();
        bool blVerDominioAplicacion = false;
        if (!string.IsNullOrEmpty(strDominioActual))
        {
            DataTable dtDominio = ListarAplicacionDominioPorAplicacion(Constantes.IDAPLICACION_REG);
            DataRow[] arr = dtDominio.Select(string.Format("{0} = '{1}'", "Dominio", strDominioActual));
            if (arr != null && arr.Length > 0)
            {
                hlkNuevaCuenta.NavigateUrl = string.Format("{0}{1}", arr[0]["DominioURL"].ToString(), RUTA_REG_SIGNUP);
            }
            else
            {
                blVerDominioAplicacion = true;
            }
        }
        else
        {
            blVerDominioAplicacion = true;
        }
        if (blVerDominioAplicacion)
        {
            WCAplicacion.BEAplicacion beApl = ObtenerAplicacion(Constantes.IDAPLICACION_REG);
            if (beApl != null && !string.IsNullOrEmpty(beApl.DominioURL))
            {
                hlkNuevaCuenta.NavigateUrl = string.Format("{0}{1}", beApl.DominioURL, RUTA_REG_SIGNUP);
            }
            else
            {
                hlkNuevaCuenta.Visible = false;
            }
        }
    }

    #endregion METODOS

    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Valida el Usuario
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCompania.BECompania ObtenerCompania(int pintIdCompania)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        be.IdCompania = pintIdCompania;
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }


    /// <summary>
    /// Método Valida Lista Companias por usuario
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataSet ListarCompaniasPorUsuario(string strUsuario)
    {
        DataSet ds = new DataSet();
        using (var client = new ServiceClient<WCUsuario.IWCUsuario>("BasicHttpBinding_IWCUsuario"))
        {
            ds = client.ServiceOperation<DataSet>(c => c.ListarCompaniasPorUsuario(strUsuario));
        }
        return ds;
    }

    /// <summary>
    /// Método Obtiene Usuario
    /// </summary>
    /// <returns>BEUsuario</returns>
    protected WCUsuario.BEUsuario ObtenerUsuario(string psUsuario)
    {
        WCUsuario.BEUsuario be = new WCUsuario.BEUsuario();
        be.CodigoUsuario  = psUsuario ;
        using (var client = new ServiceClient<WCUsuario.IWCUsuario>("BasicHttpBinding_IWCUsuario"))
        {
            be = client.ServiceOperation<WCUsuario.BEUsuario>(c => c.Obtener(be));
        }
        return be;
    }



    /// <summary>
    /// Método recupera una Aplicacion
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public WCAplicacion.BEAplicacion ObtenerAplicacion(int pintIdAplicacion)
    {
        WCAplicacion.BEAplicacion be = new WCAplicacion.BEAplicacion();
        be.IdAplicacion = pintIdAplicacion;
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            be = client.ServiceOperation<WCAplicacion.BEAplicacion>(c => c.Obtener(be));
        }
        return be;
    }

    /// <summary>
    /// Método recupera las Dominios de Aplicacion 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public DataTable ListarAplicacionDominioPorAplicacion(int pinIdAplicacion)
    {
        DataTable dt = new DataTable();
        WCAplicacionDominio.BEAplicacionDominio beAplicacionDominio = new WCAplicacionDominio.BEAplicacionDominio();
        beAplicacionDominio.IdAplicacion = pinIdAplicacion;
        using (var client = new ServiceClient<WCAplicacionDominio.IWCAplicacionDominio>("BasicHttpBinding_IWCAplicacionDominio"))
        {
            dt = client.ServiceOperation<DataTable>(c => c.ListarPorAplicacion(beAplicacionDominio).Tables[0]);
        }
        return dt;
    }

    #endregion

}